/*
    编程实现对一维数组的扩容，当已存储元素数量达到总容量80%时扩容1.5倍。
*/

import java.util.Scanner;
import java.util.Arrays;

public class ArrayExtend {

    public static void main(String[] args) {

        // 1.声明一个长度为10的int类型一维数组。
        int[] arr = new int[10];
        System.out.println("当前数组为长度为10的int类型数组");

        Scanner sc = new Scanner(System.in);
        
        // 2.使用for循环不断提示用户输入数据给数组中的元素赋值。
        int cnt = 0;                                               // 声明一个int类型变量并初始化，用于记录数组中有效元素的个数
        for(int i = 0;; i++) {
            System.out.println("请输入第" + (i + 1) + "个元素：");    // 提示用户输入元素
            arr[i] = sc.nextInt();
            cnt++;                                                 // 每次输入元素有效元素个数加1

            // 3.判断数组中有效元素数量是否已达到80%，是则声明一个新数组arr1进行扩容并复制有效元素，并把arr1的地址赋值给arr。
            if(cnt >= 0.8*arr.length) {
                int[] arr1 = new int[arr.length + arr.length / 2];
                System.arraycopy(arr, 0, arr1, 0, cnt);
                arr = arr1;
                System.out.println("当前元素数量已达到总容量的80%，数组长度已扩容为" + arr.length);
            }

            // 4.提示用户继续输入元素，或者结束输入并输出最终的数组。
            System.out.println("继续输入元素？ 是：y  否：n");
            String str = sc.next();
            if(str.equals("n")) {
                System.out.println("输入结束，当前数组为：" + Arrays.toString(arr));
                break;
            }
        }
    }
}